<?php 
    class PHPExcelOperation{
        //取出excel中的数据
        public function getExcelData($filename, $exts){
            $b=array();
            //导入PHPExcel类库
            include(dirname(__FILE__).'/PHPExcel-1.8/Classes/PHPExcel.php');
            //不同类型的文件导入不同的类
            if ($exts == 'xls') {
                include(dirname(__FILE__).'/PHPExcel-1.8/Classes/PHPExcel/Reader/Excel5.php');
                $PHPReader = new PHPExcel_Reader_Excel5();
            } else if ($exts == 'xlsx') {
                include(dirname(__FILE__).'/PHPExcel-1.8/Classes/PHPExcel/Reader/Excel2007.php');
                $PHPReader = new PHPExcel_Reader_Excel2007();
            }
            //载入文件
            $PHPExcel = $PHPReader->load($filename);
            //获取表中的第一个工作表，如果要获取第二个，把0改为1，依次类推
            $currentSheet = $PHPExcel->getSheet(0);
            //获取总列数
            $allColumn = $currentSheet->getHighestColumn();
            //获取总行数
            $allRow = $currentSheet->getHighestRow();
            //循环获取表中的数据，$currentRow表示当前行，从哪行开始读取数据，索引值从0开始
            for ($currentRow = 1; $currentRow <= $allRow; $currentRow++) {
                //从哪列开始，A表示第一列
                for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
                    //数据坐标
                    $address = $currentColumn . $currentRow;
                    //读取到的数据，保存到数组$arr中
                    $data[$currentRow][$currentColumn] = $currentSheet->getCell($address)->getValue();
                }
                $result[]=$data[$currentRow];
            }
            @unlink ( $filename ); //删除上传的文件
            return $result;
        }

    
        /**
        * 导出excel
        * @param array $data 导入数据
        * @param string $savefile 导出excel文件名
        * @param array $fileheader excel的表头
        * @param string $sheetname sheet的标题名
        */
        public function exportExcel($data, $savefile, $fileheader, $sheetname){
            include(dirname(__FILE__).'/PHPExcel-1.8/Classes/PHPExcel.php');
            include(dirname(__FILE__).'/PHPExcel-1.8/Classes/PHPExcel/Reader/Excel2007.php');
            //或者excel5，用户输出.xls，不过貌似有bug，生成的excel有点问题，底部是空白，不过不影响查看。
            //import("Org.Util.PHPExcel.Reader.Excel5");
            //new一个PHPExcel类，或者说创建一个excel，tp中“\”不能掉
            $excel = new PHPExcel();
            if (is_null($savefile)) {
                $savefile = time();
            }else{
                //防止中文命名，下载时ie9及其他情况下的文件名称乱码
                iconv('UTF-8', 'GB2312', $savefile);
            }
            //设置excel属性
            $objActSheet = $excel->getActiveSheet();
            //根据有生成的excel多少列，$letter长度要大于等于这个值
            $letter = array('A','B','C','D','E','F','F','G','H','I');
            //设置当前的sheet
            $excel->setActiveSheetIndex(0);
            //设置sheet的name
            $objActSheet->setTitle($sheetname);
            $excel->getDefaultStyle()->getFont()->setName('等线');  
            $excel->getDefaultStyle()->getFont()->setSize(11);
            //左对齐
            $excel->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);  
            //设置表头
            for($i = 0;$i < count($fileheader);$i++) {
                //单元宽度自适应,1.8.1版本phpexcel中文支持勉强可以，自适应后单独设置宽度无效
                //$objActSheet->getColumnDimension("$letter[$i]")->setAutoSize(true); 
                $objActSheet->getColumnDimension("$letter[$i]")->setWidth(20);

                //设置表头值，这里的setCellValue第二个参数不能使用iconv，否则excel中显示false
                $objActSheet->setCellValue("$letter[$i]1",$fileheader[$i]); 
                $objActSheet->getStyle($letter[$i])->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
                //设置表头字体样式
                //$objActSheet->getStyle("$letter[$i]1")->getFont()->setName('等线');
                //设置表头字体大小
                //$objActSheet->getStyle("$letter[$i]1")->getFont()->setSize(11);
                //设置表头字体是否加粗
                //$objActSheet->getStyle("$letter[$i]1")->getFont()->setBold(false);
                //设置表头文字垂直居中
                //$objActSheet->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
                //设置文字上下居中
                //$objActSheet->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
                //设置表头外的文字垂直居中
                //$excel->setActiveSheetIndex(0)->getStyle($letter[$i])->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            
            }
            //单独设置D列宽度为15
            //$objActSheet->getColumnDimension('D')->setWidth(15);
            //这里$i初始值设置为2，$j初始值设置为0，自己体会原因
            for ($i = 2;$i <= count($data) + 1;$i++) {
                $j = 0;
                foreach ($data[$i - 2] as $key=>$value) {
                    //不是图片时将数据加入到excel，这里数据库存的图片字段是img
                    //if($key != 'img'){
                        $objActSheet->setCellValue("$letter[$j]$i",$value);
                    //}
                    $j++;
                }
                //设置单元格高度，暂时没有找到统一设置高度方法
                //$objActSheet->getRowDimension($i)->setRowHeight('180px');
            }
            header('Content-Type: application/vnd.ms-excel');
            //下载的excel文件名称，为Excel5，后缀为xls，不过影响似乎不大
            header('Content-Disposition: attachment;filename="' . $savefile . '.xlsx"'); 
            header('Cache-Control: max-age=0');
            // 用户下载excel
            $objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
            $objWriter->save('php://output');
            // 保存excel在服务器上
            //$objWriter = new PHPExcel_Writer_Excel2007($excel);
            //或者$objWriter = new PHPExcel_Writer_Excel5($excel);
            //$objWriter->save("./".$savefile.'.xlsx');
        }
    }

?>